/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package networkservice;

import gfdclient.InnerLogic;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import userservercontroller.IUserServerController;

/**
 * Класс обработки исключения RemoteException
 * @author ID=1008, Ustinov
 * @author Alex-Rude ID = 2001
 */
public class ReconnectPingService implements IReconnectPingService {
    /** функциональное ядро */
    private InnerLogic logic;
    /** число попыток переподелючения */
    private int counter=3;

    public ReconnectPingService(InnerLogic logic) {
        this.logic = logic;
    }

    //--------------------
    /**
     * Реакция на разрыв
     * @return true - соединение восстановлено, false - не восстановлено
     */
    public boolean doReaction(){
        IUserServerController usc;
        boolean res = true;
        //соединиться с сервером
        for (int i = 0; i < counter; i++) {
            try {
                usc=logic.reconnectServer();
                //если авторизовался - соединение восстановлено
                if(logic.reautorization()>=0) return true; 
                res=false;
                break;     
            } catch (RemoteException ex) {
            } catch (NotBoundException ex) {
            } catch (MalformedURLException ex) {
            }
        }
        // если соединение с арбитром не установлено, соединиться с кандидатом
        if(res){ 
            try {
                String candidateAddress = logic.getCandidateAddress();
                if(candidateAddress!=null){ // если кандидат есть - соединиться
                    logic.connectServer(candidateAddress);
                    //авторизация
                    if(logic.reautorization()>=0); return true;
                }
            } catch (RemoteException ex) {   
            } catch (NotBoundException ex) {
            } catch (MalformedURLException ex) {
            }
        }
        //изменить состояние окна
        logic.getMainFrame().setConnectStatus(false);
        logic.getMainFrame().setStatusBarText("Соединение разорвано. Попытка переподключения завершилась неудачей.");
        return false;
    }

}
